package lv.clientedisqueria.view.ingeniero;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.Observer;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import lv.clientedisqueria.controller.Controller;
import lv.clientedisqueria.model.ingeniero.IngenieroModel;
import lv.clientedisqueria.view.AbstractPanel;
import lv.mensajeriadisqueria.idomain.IIngeniero;

@SuppressWarnings("serial")
public class IngenieroPanel extends AbstractPanel<IIngeniero> implements Observer{

	private final Controller<IIngeniero> ingenieroController;
	
	private JTextField nombreTF;
	private JLabel nombreLbl;
	private JPanel textFieldsPanel;
	private JScrollPane scrollPane;
	private JTable ingenieroTabla;
	
	public IngenieroPanel(final IngenieroModel ingenieroModel){
		super(ingenieroModel);
		ingenieroController=new Controller<IIngeniero>(ingenieroModel);
		ingenieroController.addObserver(this);
		iniciarVista();
	}
	
	private void iniciarVista() {
		setLayout(new BorderLayout());
		add(new IngenieroMenuBoton(ingenieroController), BorderLayout.NORTH);
		
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(getTextFieldsPanel(), BorderLayout.NORTH);
		
		panel.add(getScrollPane(), BorderLayout.CENTER);
		add(panel, BorderLayout.CENTER);
	}

	public JScrollPane getScrollPane() {
		if(scrollPane == null) {
			scrollPane = new JScrollPane(getTabla());
			scrollPane.setAutoscrolls(true);
		}
		return scrollPane;
	}
	
	public JTable getTabla() {
		if(ingenieroTabla == null) {
			ingenieroTabla = new JTable(ingenieroController.getModelo().getTablaModel());
			ingenieroTabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			ingenieroTabla.setSelectionModel(ingenieroController.getModelo().getTablaModel().getListSelectionModel());
		}
		return ingenieroTabla;
	}
	
//	@Override
//	public void update(Observable observable, Object object) {
//		if (observable!= null)
//			if(object != null){
//				if(Modelo.INSERTAR.equalsIgnoreCase(String.valueOf(object))) {
//					nombreTF.setText("");
//					habilitarTextField(true);
//				} else if(Modelo.MODIFICAR.equalsIgnoreCase(String.valueOf(object))) {
//					habilitarTextField(true);
//				} else if(Modelo.BORRAR.equalsIgnoreCase(String.valueOf(object))) {
//					habilitarTextField(false);
//					Mensajeria.mensajeInformacion(this, "Borrado de Ingeniero", "El Ingeniero fue borrado exitosamente");
//				} else if(Modelo.GUARDAR.equalsIgnoreCase(String.valueOf(object))) {
//					IIngeniero ingeniero= ingenieroController.getModelo().getTablaModel().getSeleccionado();
//					ingeniero.setNombre(getNombreTF().getText());
//					habilitarTextField(false);
//					ingenieroController.guardar(ingeniero);
//				} else if(Modelo.GUARDADO.equalsIgnoreCase(String.valueOf(object))) {
//					Mensajeria.mensajeInformacion(this, "Guardar Ingeniero", "El ingeniero se guardo correctamente");
//				} else if(Modelo.CANCELAR.equalsIgnoreCase(String.valueOf(object))) {
//					ingenieroController.getModelo().getTablaModel().seleccionarPrimero();
//					habilitarTextField(false);
//				}
//				validate();
//				repaint();
//			}		
//	}

	public Controller<IIngeniero> getIngenieroController() {
		return ingenieroController;
	}

	public JTextField getNombreTF() {
		if(nombreTF == null) {
			nombreTF = new JTextField();
			nombreTF.setEnabled(false);
			nombreTF.setText(ingenieroController.getModelo()
					.getTablaModel().getSeleccionado().getNombre());
		}
		return nombreTF;
	}

	public JLabel getNombreLbl() {
		if(nombreLbl == null) {
			nombreLbl = new JLabel("Nombre");
		}
		return nombreLbl;
	}

	public JPanel getTextFieldsPanel() {
		if(textFieldsPanel == null){
			textFieldsPanel = new JPanel(new GridLayout(1, 1));//VER SI NO TENGO QUE MODIFICAR EL LAYOUT
			textFieldsPanel.add(getNombreLbl());
			textFieldsPanel.add(getNombreTF());
			textFieldsPanel.validate();
		}
		return textFieldsPanel;
	}

	@Override
	protected void actualizarCampos(IIngeniero ingeniero) {
		getNombreTF().setText(ingeniero.getNombre());
		IngenieroPanel.this.repaint();
	}

	@Override
	protected IIngeniero actualizarDomain(IIngeniero ingeniero) {
		ingeniero.setNombre(getNombreTF().getText());
		return ingeniero;
	}

	@Override
	protected void actualizarTabla() {
		ingenieroTabla.updateUI();		
	}

	@Override
	protected Controller<IIngeniero> getController() {
		return this.ingenieroController;
	}

	@Override
	protected void iniciarCampos() {
		nombreTF.setText("");		
	}

	@Override
	protected void habilitarTextField(boolean habilitar) {
		nombreTF.setEnabled(habilitar);
	}
}
